package xyz.cerberu.cet.global.utils;

import net.coobird.thumbnailator.Thumbnails;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

/**
 * @author β世界
 * Created on 7:57
 * @Description 图片工具类
 */
public class ImageUtils {

    /**
     * @author β世界 on 7:58 2021/4/1
     * 将图片进行指定大小的压缩
     * @param image: 图片数据
     * @param h: 高
     * @param w: 宽
     * @return byte[]
     **/
    public static byte[] compressImage(byte[] image,int w,int h){
        try {
            // 内容判断,如果图片的内容符合以下的条件，都是不能被压缩的
            if(image == null && image.length <= 0){
                return image;
            }
            // 为图片创建读取和输出流
            ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(image.length);
            // 检查压缩的需求是否满足
            BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(image));
            w = Math.min(bufferedImage.getWidth(), w);
            h = Math.min(bufferedImage.getHeight(), h);
            // 进行压缩
            Thumbnails.of(bufferedImage)
                    // 设置分辨率的大小
                    .size(w,h)
                    // 设置压缩质量
                    .outputQuality(0.8d)
                    // 输出的格式
                    .outputFormat("JPG")
                    .toOutputStream(byteOutputStream);
            // 将压缩的结果返回
            image = byteOutputStream.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return image;
    }

}
